package bean;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.component.datatable.DataTable;
import org.primefaces.model.UploadedFile;

import br.com.biblioteca.interfaces.GerenciadorDeAutor;
import br.com.biblioteca.interfaces.GerenciadorDeCategoria;
import br.com.biblioteca.interfaces.GerenciadorDeEditora;
import br.com.biblioteca.interfaces.GerenciadorDeLivro;
import br.com.biblioteca.model.*;

@ManagedBean
@SessionScoped
public class LivroBEAN implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@EJB
	private GerenciadorDeLivro gerenciadorDeLivro;
	@EJB
	private GerenciadorDeAutor gerenciadorDeAutor;
	@EJB
	private GerenciadorDeCategoria gerenciadorDeCategoria;
	@EJB
	private GerenciadorDeEditora gerenciadorDeEditora;
	
	private Livro livro;
	private DataTable datatable;
	private Boolean btnSalvar;
	private Boolean btnCadastrar;
	private UploadedFile file;

	public LivroBEAN(){
		livro = new Livro();
		livro.setAutores(new Autor());
		livro.setEditora(new Editora());
		livro.setCategorias(new Categoria());
		btnSalvar = false;
		btnCadastrar = true;
		
	}
	
	public void cadastrarLivro() throws IOException {
		int id = gerenciadorDeLivro.adicionarLivro(livro);
		salvaArquivo(id);
		livro = new Livro();	
		FacesContext context = FacesContext.getCurrentInstance(); 
		context.addMessage(null, new FacesMessage("Successful", "Cadastro realizado com sucesso!! "));
	}
	
	public void salvaArquivo(int nome) throws IOException{
		if (file != null) {
			String caminho = FacesContext.getCurrentInstance().getExternalContext().getRealPath("" + "\\fotos\\livro\\");
			byte[] conteudo = file.getContents();
			FileOutputStream arquivo = new FileOutputStream(caminho+"\\" + nome + ".jpg");
			arquivo.write(conteudo);
			arquivo.close();
		}
	}
	
	public String salvarLivro() throws IOException{
		gerenciadorDeLivro.alterarLivro(livro);
		btnSalvar = false;
		btnCadastrar = true;
		System.out.println("Salvar");
		salvaArquivo(livro.getId());
		livro = new Livro();
		livro.setAutores(new Autor());
		livro.setEditora(new Editora());
		livro.setCategorias(new Categoria());
		
		return "";
	}
	
	public String cancelar(){
		btnSalvar = false;
		btnCadastrar = true;
		livro = new Livro();
		livro.setAutores(new Autor());
		livro.setEditora(new Editora());
		livro.setCategorias(new Categoria());
		return "telaAdm.xhtml";
	}
	
	public String editarLivro() {
		//conversa.begin();
		livro = (Livro) datatable.getRowData();
		btnSalvar = true;
		btnCadastrar = false;
		return "telaCadLivro.xhtml";
	}
	
	public String deletarLivro(){
		livro = (Livro) datatable.getRowData();
		gerenciadorDeLivro.deletarLivro(livro);
		livro = new Livro();
		return "";
	}
	
	public Livro getLivro() {
		return livro;
	}
	
	public List<Livro> getLivros() {
		return gerenciadorDeLivro.getLivros();
	}

	public void setLivro(Livro livro) {
		this.livro = livro;
	}

	public DataTable getDatatable() {
		return datatable;
	}

	public void setDatatable(DataTable datatable) {
		this.datatable = datatable;
	}

	public Boolean getBtnSalvar() {
		return btnSalvar;
	}

	public void setBtnSalvar(Boolean btnSalvar) {
		this.btnSalvar = btnSalvar;
	}

	public Boolean getBtnCadastrar() {
		return btnCadastrar;
	}

	public void setBtnCadastrar(Boolean btnCadastrar) {
		this.btnCadastrar = btnCadastrar;
	}

	public UploadedFile getFile() {
		return file;
	}

	public void setFile(UploadedFile file) {
		this.file = file;
	}
	
	public List<Autor> getAutores(){
		return gerenciadorDeAutor.getAutores();
	}
	
	public List<Editora> getEditoras(){
		return gerenciadorDeEditora.getEditoras();
	}
	
	public List<Categoria> getCategorias(){
		return gerenciadorDeCategoria.getCategorias();
	}
}
